package com.agua.enturno.servicios;

import com.agua.enturno.excepciones.ExcepcionDeReglaDelNegocio;
import com.agua.enturno.vista.dto.*;
import org.joda.time.Interval;
import org.joda.time.LocalDate;

import java.util.List;

public interface AgendaService {

	AgendaDTO findById(Long id);
	
	List<HorarioDTO> findHorarios(Long agendaId);
	
	DiaDTO findHorariosByDate(Long agendaId, LocalDate fecha);
	
	List<HorarioFullDTO> findHorariosFullByInterval(Long agendaId, Interval intervalo);
	
	DiaDTO findHorariosByDateFilled(Long agendaId, LocalDate fecha);
	
	SemanaDTO findHorariosByWeek(Long agendaId, LocalDate lunes);
	
	List<DiaNoLaboralDTO> findDiasNoLaborales(Long agendaId);
	
	List<JornadaLaboralHabitualDTO> findJornadasLaboralesHabituales(Long agendaId);
	
	List<JornadaLaboralOcasionalDTO> findJornadasLaboralesOcasionales(Long agendaId);
	
	Long agregarJornadaLaboralHabitual(Long agendaId, JornadaLaboralHabitualDTO jornadaHabitualDTO) throws ExcepcionDeReglaDelNegocio;

	void quitarJornadaLaboralHabitual(Long agendaId, Long jornadaLaboralHabitualId, String motivo) throws ExcepcionDeReglaDelNegocio;
	
	Long agregarJornadaLaboralOcasional(Long agendaId, JornadaLaboralOcasionalDTO jornadaOcasionalDTO) throws ExcepcionDeReglaDelNegocio;

	void quitarJornadaLaboralOcasional(Long agendaId, Long jornadaLaboralOcasionalId, String motivo) throws ExcepcionDeReglaDelNegocio;
	
	Long agregarDiaNoLaboral(Long agendaId, DiaNoLaboralDTO diaNoLaboralDTO) throws ExcepcionDeReglaDelNegocio;
	
	void quitarDiaNoLaboral(Long agendaId, Long diaNoLaboralId) throws ExcepcionDeReglaDelNegocio;
	
	Long modificarDiaNoLaboral(Long agendaId, Long diaNoLaboralAModificarId, DiaNoLaboralDTO diaNoLaboralModificadoDTO) throws ExcepcionDeReglaDelNegocio;
	
}
